Estoy trabajando en un problema que requiere que invierta una cadena sin tener que cambiar la posición de los caracteres que no son cadenas, caracteres como !, (, ), | y así.
Creo que casi he terminado de resolver el problema, pero sigo recibiendo el error TypeError: letters.pop is not a function , intenté verificar cuál podría ser la causa de la posición y obtuve una pista de que .pop no se puede usar en ningún tipo de datos eso no es una matriz. Estoy usando el método .pop en una matriz que en realidad es una matriz válida, pero sigo recibiendo el error.
Creo que me estoy perdiendo algo y me alegraría si alguien pudiera mostrarlo.
let word = "hello-world!" const isLetter = (word) => { return word.toUpperCase() !== word.toLowerCase() } const letters = (word) => { return [...word].filter((letter) => isLetter(letter)) } const reverseWord = [...word].map((letter) => isLetter(letter) ? letters.pop() : letter).join("") console.log(reverseWord)letters.pop() no es una función. pop() es una función en arreglos, pero letters no es un arreglo. es una funcion ¿Querías invocarlo?:
letters(word).pop() Aunque tenga en cuenta que la función devuelve una nueva matriz cada vez que se invoca. Entonces esa operación realmente no hace nada útil. ¿Quizás, en cambio, pretendía invocar la función de inmediato y solo una vez y hacer que las letters almacenen la matriz resultante?:
const letters = ((word) => { return [...word].filter((letter) => isLetter(letter)) })(word); Nota: No puedo decir si esto hará que todo su programa funcione como se esperaba. La lógica me parece extraña y es posible que también haya otros problemas. Pero el punto principal aquí es que las letters en sí mismas no son una matriz en el código original, es una función que devuelve una matriz.
Es porque las letras eran una función de flecha, no una matriz. Intenté reproducir su problema e hice algunos cambios en él. He adjuntado un fragmento de código de trabajo (está devolviendo la cadena en orden inverso). Espero que así es como querías que funcionara.
let word = "hello-world!" const isLetter = (word) => { return word.toUpperCase() !== word.toLowerCase() } const letters = [...word].filter((letter) => isLetter(letter)) const reverseWord = [...word].map((letter) => isLetter(letter) ? letters.pop() : letter).join("") console.log(reverseWord)